package com.ai.smlcore.util;

import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.ai.frame.logger.Logger;
import com.ai.frame.logger.LoggerFactory;

/**
 * 字符串工具类
 */
public final class StringUtil {
	private static final Logger logger = LoggerFactory.getActionLog(StringUtil.class);
	/** Private Constructor **/
	private StringUtil(){
	}
	
	/***
	 * 
	 * @Description:  字符集
	 * @ClassName ENCODING
	 * @author: qinzheng
	 * @Created 2015年9月10日 上午9:48:26
	 */
	public interface ENCODING {
		String UTF_8 = "UTF-8";
		String GBK = "GBK";
		String ISO_8858_1 = "ISO-8859-1";
		String GB2312 = "GB2312";
	}
	
	/**
	 * 
	 * @Description: 生成UUID
	 * @return
	 * @ReturnType String
	 * @author: qinzheng
	 * @Created 2015年8月31日 上午11:31:30
	 */
	public static String uuid(){
		return UUID.randomUUID().toString();
	}
	
	/**
	 * int字符串装int值
	 * @Description: 
	 * @param intstr
	 * @return
	 * @ReturnType int
	 * @author: qinzheng
	 * @Created 2015年8月21日 上午10:44:01
	 */
	public static int toInt(String intstr){
		try {
			return Integer.parseInt(intstr);
		} catch (Exception e) {
			return 0;
		}
	}
	
	/**
	 * 判断字符串是否非null && 非空字符 
	 * 
	 * @param param
	 * @return
	 */
	public static boolean isNotEmpty(String param) {
		return param != null && !"".equals(param.trim());
	}

	/**
	 * 判断字符串是否为null || 空字符串
	 * 
	 * @param param
	 * @return
	 */
	public static boolean isEmpty(String param) {
		return param == null || "".equals(param.trim());
	}
	
	/**
	 * 判断是否为数字
	 * @param str
	 * @return True为数字
	 */
	public static boolean isNum(String str) {
		String regex = "^(-?\\d+)(\\.\\d+)?$";
		return matchRegex(str, regex);
	}
	
	public static String trim2Empty(String str) {
		return isEmpty(str) ? "" : str.trim();
	}	
	
	public static boolean matchRegex(String value, String regex) {
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(value);
		return matcher.matches();
	}

	/** 检查数据格式 */
	public static void paramMatchRegex(String value, String regex, String field) throws IllegalArgumentException {
		boolean match = false;
		try {
			match = matchRegex(value, regex);
		} catch (Exception e) {
			logger.error("", "", e);
			throw new IllegalArgumentException("参数" + field + "格式错误");
		}
		if (!match) {
			throw new IllegalArgumentException("参数" + field + "格式错误");
		}
	}
	/**
	 * 
	 * @Description: 字符串字符转换
	 * @param str
	 * @param encoding
	 * @param toEncoding
	 * @return
	 * @throws Exception
	 * @ReturnType String
	 * @author: qinzheng
	 * @Created 2015年9月10日 上午9:52:45
	 */
	public static String convertCharacter(String str, String encoding, String toEncoding) throws Exception{
		return new String(str.getBytes(encoding), toEncoding);
	}
}
